package com.hxzy.controller;

import com.baizhi.common.vo.PageVO;
import com.baizhi.common.vo.R;
import com.hxzy.dto.GoodsInfoSearch;
import com.hxzy.entity.GoodsInfo;
import com.hxzy.service.GoodsInfoService;
import com.hxzy.vo.GoodsInfoVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * mybatis和hibernate的区别：
 * 1、mybatis半自动的ORM框架，需要开发者熟练使用sql,  hibernate是全自动框架，强调尽可能不要使用sql
 * 2、Hibernate的开发难度要大于Mybatis。主要由于Hibernate比较复杂、庞大，学习周期较长。
 * 3、hibernate缓存机制要比mybatis要好，但是由于是分布式项目，缓存机制显得没有任何意义
 *
 * mybatis--> mybatis-plus(仿spring-data）     hibernate-->spring-data
 */
@RestController
public class GoodsInfoController {

    @Autowired
    private GoodsInfoService goodsInfoService;

    @PostMapping(value = "/goodsinfo")
    public R add(@RequestBody GoodsInfo goodsInfo){
        this.goodsInfoService.add(goodsInfo);
        return R.ok();
    }

    @PutMapping(value = "/goodsinfo")
    public R update(@RequestBody GoodsInfo goodsInfo){
        this.goodsInfoService.update(goodsInfo);
        return R.ok();
    }

    @GetMapping(value = "/goodsinfo/{id}")
    public R findById( @PathVariable(value = "id") Long id){
        //动态延迟代理查询
        GoodsInfo byId = this.goodsInfoService.findById(id);

        //把对象 变为 自定义类
        GoodsInfo vo=new GoodsInfo();
        BeanUtils.copyProperties(byId,vo);

        return R.okHasData(vo);
    }

    /**
     *  根据名称查询
     * @param name
     * @return
     */
    @GetMapping(value = "/goodsinfo/byname")
    public R findByName(String name){
        List<GoodsInfoVO>  arr=this.goodsInfoService.findByName("%"+name+"%");
        return R.okHasData(arr);
    }

    @GetMapping(value = "/goodsinfo/search")
    public R search(GoodsInfoSearch goodsInfoSearch){
       PageVO arr=this.goodsInfoService.search(goodsInfoSearch);
        return R.okHasData(arr);
    }




}
